<?php

namespace App\Console\Commands;

use App\Models\News;
use Illuminate\Console\Command;

class SitemapCommand extends Command
{
    /**
     * 请求：
     *  sudo -u www php artisan command:sitemap
     *  sudo -u www php /www/wwwroot/option/artisan command:sitemap
     *  sudo -u www php /www/wwwroot/newbusinesswire.com/laravel/artisan command:sitemap
     *
     */
    /**
     * 参数与选项的区别
     *      在执行命令时，参数必须严格按定义时的顺序输入，不需输入参数名，只需输入参数的值即可。
     *      输入选项则必须带选项名，且选项名前须加 -- 前缀（选项简写字母前加 -），选项可按任意顺序输入
     */

    // 请求 以及参数
    // protected $signature = 'command:name {param1} {param2}';  // 必填参数
    // protected $signature = 'command:name {参数名?} {参数名=默认值} {参数名? : 参数说明}';  // 可选参数
    // protected $signature = 'command:name {--选项名} {--选项名=} {--选项名=默认值} {--简写字母|选项名} {--选项名 : 选项说明}';  // 选项
    protected $signature   = 'command:sitemap';
    protected $description = '站点生成sitemap.txt';

    public function __construct()
    {
        parent::__construct();
    }

    // 执行
    public function handle()
    {
        $this->line('站点生成sitemap！');

        $this->line('获取最近的1000篇文章！');
        $urls = $this->getArticle();

        $this->line('生成sitemap.txt！');
        $file = public_path('sitemap.txt');
        file_put_contents($file, implode("\n", $urls));

        $this->line('生成sitemap.txt成功！');
    }

    // 获取1000篇的文章
    protected function getArticle()
    {
        // 获取数据
        $where = [['is_draft', '=', 0], ['verify', '=', 1]];
        $lists = (new News())->getList($where, 1000);

        // 整理
        $urls = [];
        foreach($lists as $_row){
            $urls[] = atwUrl('article', $_row);
        }

        return $urls;
    }


    // 参数与选项
    public function _handle()
    {
        // 参数
        echo $text = $this->argument('text');
        echo chr(10);
        $all = $this->argument();
        var_dump($all);
        echo chr(10);

        // 选项
        $option = $this->option('show');
        echo $option;
        echo chr(10);


        echo '测试';
        $this->info("md5('{测试}') = 测试");   // 输出

        return 0;
    }

}
